// Standard include guard
#ifndef MAZE_HPP
#define MAZE_HPP

/**
  * @file Maze.hpp
  * @author Ryan Van Why
  * @brief This is the main class for the maze solving minigame.
  */

// Forward declaration so as not to break included headers
namespace mindsweeper {
namespace maze {
class Maze;
}
}

// Mindsweeper project
#include <main/Game.hpp>     // We subclass the Game class to be a game
#include <main/GameMain.hpp> // This allows us access to timestamps, GameManager, ...

// Our project's namespace
namespace mindsweeper {
// This minigame's namespace
namespace maze {

class Maze : public main::Game {
	public:
		/**
		  * @brief The constuctor for this game.
		  * @param game_main A pointer to the main GameMain instance
		  */
		Maze(main::GameMain *game_main);

		/**
		  * @brief Initializes this game.
		  */
		void init();

		/**
		  * @brief Processes an event
		  * @param event The event to be processed.
		  */
		void processEvent(sf::Event &event);

		/**
		  * @brief Renders the current frame.
		  */
		void render();

		/**
		  * @brief This updates the game logic for the next frame.
		  */
		void update();
	
	private:
		// A pointer to the GameMain instance
		main::GameMain *gameMain;

		// Elapsed time
		double time;
};

// Close namespaces
}
}

#endif // MAZE_HPP
